package com.wust.dns_resolver.entity;


import lombok.Data;

/**
 * 用于域名解析的UDP实体类,暂时没用上，后续计划创建一个类封装一次DNS域名查询的过程（产生的数据），包括请求报文和响应报文（使用一个报文内部类）
 * 报文内部类中装解析出来的数据，用数组装十六进制报文内容，
 * 再创建一个记录类(名称，解析出来的值，对应在报文数据中的起始位置，最终位置)记录其他数据。
 * 报文内部类含有记录类数组，（比如事务ID、标志位、问题数、回答数记录）
 * 再创建一个回答类，含有记录类数组（记录比如响应的域名、记录类型、生存时间、查到的ip地址）
 * 报文内部类含有一个响应类数组（因为响应报文里可能有多个回答）
 *
 */
@Data
public class DnsUdpPacket {

    //---------------- UDP层属性 -----------------
    //源端口 (2字节)
    private int sourcePort;

    //目的端口 (固定53)
    private int destinationPort = 53;

    //UDP数据报长度 (2字节)
    private int length;

    //---------------- DNS头部属性 -----------------
    //事务ID (2字节,随机生成的2字节ID（0x6EA2），用于匹配请求和响应)
    private int transactionId;

    //标志位 (2字节)
    private int flags;

    //问题数 (2字节)
    private int questionCount;

    //回答数 (2字节)
    private int answerCount;

    //授权数 (2字节)
    private int authorityCount;

    //附加数 (2字节)
    private int additionalCount;

    //请求域名
    private String qDomainName;

    //响应域名
    private String rDomainName;

    //记录类型 本程序中为A 或 AAAA
    private int type;

    //(生存时间,缓存有效期)
    private long ttl;

    //解析出来的IPv4地址
    private String ipv4Address;

    //解析出来的IPv6地址
    private String ipv6Address;


}
